package com.delivery.result;

import lombok.Data;

import java.io.Serializable;
import java.util.List;


/**
 * API返回结果
 */

@Data
public class ApiResultList<T> implements Serializable {
  /**
   * 状态码，200：成功，201：失败
   */
  private int code;

  /**
   * 消息
   */
  private String msg;

  /**
   * 数据集合
   */
  private List<T> data;

  /**
   * API返回结果，状态码200成功
   *
   * @param msg  消息
   * @param data 返回数据
   * @return
   */
  public static <T> ApiResultList<T> ok(String msg) {

    return ok(msg, null);
  }

  /**
   * API返回结果，状态码200成功
   *
   * @param data 返回数据
   * @return
   */
  public static <T> ApiResultList<T> ok(List<T> dataList) {

    return ok("", dataList);
  }

  /**
   * API返回结果，状态码200成功
   *
   * @param msg  消息
   * @param data 返回数据
   * @return
   */
  public static <T> ApiResultList<T> ok(String msg, List<T> dataList) {
    return new ApiResultList<T>(200, msg, dataList);
  }

  /**
   * API返回结果，状态码201失败
   *
   * @param code 状态码
   * @param msg  消息
   * @return
   */
  public static <T> ApiResultList<T> fail(String msg) {

    return fail(msg, null);
  }

  /**
   * API返回结果，状态码201失败
   *
   * @param data 返回数据
   * @return
   */
  public static <T> ApiResultList<T> fail(List<T> dataList) {
    return fail("", dataList);
  }

  /**
   * API返回结果，状态码201失败
   *
   * @param msg  消息
   * @param data 返回数据
   * @return
   */
  public static <T> ApiResultList<T> fail(String msg, List<T> dataList) {
    return new ApiResultList<>(201, msg, dataList);
  }

  public ApiResultList(int code, String msg, List<T> data) {
    this.code = code;
    this.msg = msg;
    this.data = data;
  }

}
